import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getToken, removeToken } from '@/utils/auth' // get token from cookie
// import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login', '/404'] // no redirect whitelist

router.beforeEach(async(to, from, next) => {
  // to.path  去哪里  from 从哪里来  next()放行
  // console.log('userInfo', store.getters.userInfo)

  const hasToken = getToken()
  if (hasToken) {
    // 有token
    if (store.getters.userInfo) {
      // 用户第一次登录，一定要判断一下，token是否真确
      // 疑问1：为什么第一次store.getters.userInfo是null？
      // 在main.js中，第一次登陆判断会null
      next()
    } else {
      // 到达这里并不能判断token是否正确
      try {
        // console.log('try被触发')
        // 走到这里，就发起一个请求
        await store.dispatch('user/getUserInfo')
        // console.log('userInfo', store.getters.userInfo)
        // 疑问2 为什么发起一次请求就可以判断token？
        // 因为发出请求后需要在请求拦截中添加token，如果token错误，自然无法登陆
      } catch (error) {
        // console.log('catch被触发')
        next(`/login?redirect=${to.path}`)
        removeToken()
      }
    }
    if (to.path === '/login') {
      // 有token但是又去登录页面 重定向返回主页
      next('/')
    } else {
      // 不是去登陆页面
      next()
    }
  } else {
    // 没有token
    if (whiteList.includes(to.path)) {
      // 去404或者登陆页面
      next()
    } else {
      // 去其他的页面，打回登录
      Message.error('你特么还没登陆')

      next('/login')
    }
  }
})

router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})
